#include "mainwindow.h"   // 把刚才声明的 MainWindow 类拿来用
#include "ui_mainwindow.h"// 把 Qt Designer 画好的界面也拿来用

#include <QTimer>         // 闹钟
#include <QTime>          // 取现在几点几分几秒

/* ---------- 构造函数：窗口出生时要做什么 ---------- */
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)     // 先让父类 QMainWindow 完成初始化
    , ui(new Ui::MainWindow)  // 为界面文件申请内存
{
    ui->setupUi(this);        // 【备注1】把拖好的按钮、LCD 数字屏等真正“造”出来

    /* 1. 造一个闹钟，并告诉它“我爸爸是 this”  
         当爸爸被销毁时，闹钟也会一起被销毁，不用我们手动 delete */
    m_timer = new QTimer(this);

    /* 2. 接线：闹钟响(timeout) → 执行 updateClock  
         就像把闹钟和电灯用一根看不见的线连起来，到点灯就亮 */
    connect(m_timer, &QTimer::timeout,
            this,    &MainWindow::updateClock);

    /* 3. 设定闹钟每 1000 毫秒响一次（1 秒） */
    m_timer->start(1000);

    /* 4. 先响一次，不让用户看到空白的 LCD */
    updateClock();
}

/* ---------- 析构函数：窗口死亡时要做什么 ---------- */
MainWindow::~MainWindow() = default; // 【备注2】C++11 写法：让编译器自动生成清理代码

/* ---------- 闹钟响时要做什么 ---------- */
void MainWindow::updateClock()
{
    /* 把当前时间格式化成“HH:mm:ss”，显示到 lcdTime 控件上 */
    ui->lcdTime->display(QTime::currentTime().toString("HH:mm:ss"));
}

/*
备注（普通人也能懂）：
1. ui->setupUi(this)  
   把 Qt Designer 里拖出来的按钮、标签、LCD 数字屏等“图纸”变成真正的控件，摆到窗口上。

2. = default  
   让编译器自动写析构函数内容：它会帮我们 delete ui，并把父类 QMainWindow 的析构也一并调用，省得我们自己写。

3. QTimer::timeout  
   闹钟每 1000 毫秒发出一次“timeout”信号，就像“叮——”一声。

4. connect(闹钟, 信号, 窗口, 槽函数)  
   把“叮”的声音连接到窗口的 updateClock()，于是每次“叮”都会执行 updateClock()。

5. QTime::currentTime().toString("HH:mm:ss")  
   取现在电脑上的时间，然后格式化成“23:59:59”这种字符串，再交给 LCD 显示。

6. ui->lcdTime  
   在 Qt Designer 里拖出来的 LCD 数字屏控件，它自带 display() 方法，把字符串显示成大号数字。

一句话总结：  
窗口一出生就先摆好闹钟，闹钟每秒响一次，响一次就把当前时间写到大号数字屏上；窗口关闭时，所有东西自动回收，不用我们操心。
*/